#include<vector>
using namespace std;

bool row[9][10], col[9][10], grip[3][3][10];
bool dfs(vector<vector<char>>& board)
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if (board[i][j] == '.')
            {
                for (int num = 1; num <= 9; num++)
                {
                    if (!row[i][num] && !col[j][num] && !grip[i / 3][j / 3][num])
                    {
                        board[i][j] = num + '0';
                        row[i][num] = col[j][num] = grip[i / 3][j / 3][num] = true;
                        if (dfs(board)) return true;
                        board[i][j] = '.';
                        row[i][num] = col[j][num] = grip[i / 3][j / 3][num] = false;
                    }
                }
                return false;
            }
        }
    }
    return true;
}

void solveSudoku(vector<vector<char>>& board) {
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if (board[i][j] != '.')
            {
                int num = board[i][j] - '0';
                row[i][num] = col[j][num] = grip[i / 3][j / 3][num] = true;
            }
        }
    }

    dfs(board);
}

int main()
{


	return 0;
}